*! 1.1.1 NJC 19 March 2006 
*! 1.1.0 NJC 5 December 2003 
* 1.0.1 NJC 26 June 2001 
* promoted to 7 to avoid problems with -normali?e- 
* 1.0.0 NJC 25 January 2000 aided and abetted by CFB  
program _gfilter
        version 8   
	qui tsset /* error if not set as time series */ 
	
	gettoken type 0 : 0 
	gettoken g 0 : 0 
	gettoken eqs 0 : 0 
	syntax varname(ts) [if] [in] , Lags(numlist int min=1) ///
	[ Coef(numlist min=1) Normalise Normalize ]

	local nlags : word count `lags' 
	local ncoef : word count `coef'

	if `ncoef' == 0 { 
		local coef : di _dup(`nlags') "1 " 
		local ncoef `nlags'
	} 	
	else if `nlags' != `ncoef' { 
		di as err "lags() and coef() not consistent" 
		exit 198 
	}	

	marksample touse
	tokenize `coef'
	
	if "`normalise'`normalize'" != "" { 
		local total = 0 
		forval i = 1/`ncoef' { 
			local total = `total' + (``i'')  
		} 
		forval i = 1/`ncoef' { 
			local `i' = ``i'' / `total' 
		} 
	} 	
	
	local rhs "0" 

	forval i = 1/`nlags' { 
		local l : word `i' of `lags' 
		local L = -`l'
		local op = cond(`l' < 0, "F`L'", "L`l'") 
		local rhs "`rhs' + (``i'') * `op'.`varlist'" 
	} 	
	
	qui gen `type' `g' = `rhs' if `touse' 
end
